import axios from 'axios'
import { BASE_URL, API_CONFIG } from '@/config/api'

// 创建axios实例
const api = axios.create({
  baseURL: BASE_URL,
  timeout: API_CONFIG.TIMEOUT,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
api.interceptors.request.use(
  (config) => {
    // 添加调试日志
    console.log('🚀 API Request:', {
      url: config.baseURL + config.url,
      method: config.method,
      headers: config.headers,
      data: config.data,
      params: config.params
    })
    
    // 可以在这里添加token等认证信息
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.token = token
    }
    
    // 添加User-Agent
    config.headers['User-Agent'] = 'CMP-Mobile-App/1.0.0'
    
    return config
  },
  (error) => {
    console.error('❌ Request Error:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  (response) => {
    const data = response.data
    
    // 处理业务错误码
    if (data && typeof data === 'object') {
      // token失效处理
      if (data.code === '1011' || data.code === 1011) {
        // 清除本地存储
        localStorage.removeItem('token')
        localStorage.removeItem('user')
        
        // 跳转到登录页
        // window.location.href = '/login'
        
        // 返回错误，阻止后续处理
        return Promise.reject(new Error(data.msg || 'token失效，请重新登录'))
      }
      
      // 其他业务错误码处理
      if (data.code && data.code !== '200' && data.code !== 200 && !data.success) {
        return Promise.reject(new Error(data.msg || '请求失败'))
      }
    }
    
    return data
  },
  (error) => {
    // 添加详细的错误日志
    console.error('❌ API Response Error:', {
      message: error.message,
      code: error.code,
      status: error.response?.status,
      statusText: error.response?.statusText,
      data: error.response?.data,
      config: {
        url: error.config?.baseURL + error.config?.url,
        method: error.config?.method,
        headers: error.config?.headers
      }
    })
    
    // 处理不同类型的网络错误
    if (error.code === 'NETWORK_ERROR' || error.message === 'Network Error') {
      console.error('🌐 Network Error Details:', {
        baseURL: error.config?.baseURL,
        url: error.config?.url,
        fullURL: error.config?.baseURL + error.config?.url
      })
    }
    
    // 处理请求中止错误
    if (error.code === 'ERR_CANCELED' || error.message.includes('aborted')) {
      console.error('🚫 Request Aborted Details:', {
        message: error.message,
        code: error.code,
        config: error.config,
        baseURL: error.config?.baseURL,
        url: error.config?.url
      })
    }
    
    // 处理HTTP错误响应
    if (error.response?.status === 401) {
      // 未授权，清除token并跳转到登录页
      localStorage.removeItem('token')
      localStorage.removeItem('user')
      window.location.href = '/login'
    }
    return Promise.reject(error)
  }
)

// 登录API
export const loginAPI = {
  // 用户名密码登录
  loginWithPassword: (username, password, type = 1) => {
    return api.post(API_CONFIG.LOGIN.PASSWORD, {
      username,
      password,
      type
    })
  },

  // 手机号验证码登录
  loginWithPhone: (phone, code, type = 4) => {
    return api.post(API_CONFIG.LOGIN.PASSWORD, {
      loginPhone: phone,
      phoneVerifyCode: code,
      type
    })
  },

  // 发送验证码
  sendSmsCode: (phone) => {
    return api.get(API_CONFIG.LOGIN.SEND_SMS, {
      params: {
        loginPhone: phone
      }
    })
  },

  // 退出登录
  logout: () => {
    return api.put(API_CONFIG.LOGIN.LOGOUT)
  },

  // 获取用户信息
  getUserInfo: () => {
    return api.get(API_CONFIG.USER.INFO)
  },

  // 查询用户信息
  queryUserInfo: () => {
    return api.get(API_CONFIG.USER.QUERY_USER_INFO)
  },

  // 更新用户组织
  updateUserOrg: (orgId) => {
    return api.get(API_CONFIG.USER.UPDATE_ORG, {
      params: {
        orgId: orgId
      }
    })
  }
}

export default api
